<pre class="mermaid">

    graph LR
    
    
    subgraph   'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer'["ShortLinkStatsSaveConsumer
    短链接监控状态保持消息队列消费者 - 自
     "]
      click 'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/mq/consumer/ShortLinkStatsSaveConsumer.java#")
    
      direction  LR
      'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_onMessage'("+ onMessage")
      click 'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_onMessage' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/mq/consumer/ShortLinkStatsSaveConsumer.java#onMessage")
    
      'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_actualSaveShortLinkStats'("- actualSaveShortLinkStats")
      click 'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_actualSaveShortLinkStats' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/mq/consumer/ShortLinkStatsSaveConsumer.java#actualSaveShortLinkStats")
    
    end
    
    subgraph   'com.shortLinked.project.mq.consumer.DelayShortLinkStatsConsumer'["DelayShortLinkStatsConsumer
    延迟短链接统计记录消费者
     "]
      click 'com.shortLinked.project.mq.consumer.DelayShortLinkStatsConsumer' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/mq/consumer/DelayShortLinkStatsConsumer.java#")
    
      direction  LR
      'com.shortLinked.project.mq.consumer.DelayShortLinkStatsConsumer_OnMessage'("+ OnMessage")
      click 'com.shortLinked.project.mq.consumer.DelayShortLinkStatsConsumer_OnMessage' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/mq/consumer/DelayShortLinkStatsConsumer.java#OnMessage")
    
      'com.shortLinked.project.mq.consumer.DelayShortLinkStatsConsumer_afterPropertiesSet'("+O afterPropertiesSet")
      click 'com.shortLinked.project.mq.consumer.DelayShortLinkStatsConsumer_afterPropertiesSet' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/mq/consumer/DelayShortLinkStatsConsumer.java#afterPropertiesSet")
    
    end
    
    subgraph   'com.shortLinked.project.mq.producer.ShortLinkStatsSaveProducer'["ShortLinkStatsSaveProducer
    短链接监控状态保存消息队列生产者
     "]
      click 'com.shortLinked.project.mq.producer.ShortLinkStatsSaveProducer' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/mq/producer/ShortLinkStatsSaveProducer.java#")
    
      direction  LR
      'com.shortLinked.project.mq.producer.ShortLinkStatsSaveProducer_send'("发送短链接监控统计消息到 rabbitm
     + send")
      click 'com.shortLinked.project.mq.producer.ShortLinkStatsSaveProducer_send' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/mq/producer/ShortLinkStatsSaveProducer.java#send")
    
    end
    
    subgraph   'com.shortLinked.project.mq.producer.DelayShortLinkStatsProducer'["DelayShortLinkStatsProducer
    延迟消息短链接统计发送者
     "]
      click 'com.shortLinked.project.mq.producer.DelayShortLinkStatsProducer' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/mq/producer/DelayShortLinkStatsProducer.java#")
    
      direction  LR
      'com.shortLinked.project.mq.producer.DelayShortLinkStatsProducer_send'("发送延迟消息短链接统计
     + send")
      click 'com.shortLinked.project.mq.producer.DelayShortLinkStatsProducer_send' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/mq/producer/DelayShortLinkStatsProducer.java#send")
    
    end
    
    subgraph   'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler'["MessageQueueIdempotentHandler
    短链接监控访问统计消息幂等处理器
     "]
      click 'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/mq/idempotent/MessageQueueIdempotentHandler.java#")
    
      direction  LR
      'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_isMessageBeingConsumed'("判断消息是否被消费过
     看这个幂等标识能否被插入redis中
     可以被插入，代表没有被消费过
     + isMessageBeingConsumed")
      click 'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_isMessageBeingConsumed' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/mq/idempotent/MessageQueueIdempotentHandler.java#isMessageBeingConsumed")
    
      'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_isAccomplish'("判断消息是否被消费完成 - 未消费完返回
     + isAccomplish")
      click 'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_isAccomplish' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/mq/idempotent/MessageQueueIdempotentHandler.java#isAccomplish")
    
      'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_setAccomplish'("消息消费完全被消费
     + setAccomplish")
      click 'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_setAccomplish' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/mq/idempotent/MessageQueueIdempotentHandler.java#setAccomplish")
    
      'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_delMessageProcessed'("消费消费异常情况
     + delMessageProcessed")
      click 'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_delMessageProcessed' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/mq/idempotent/MessageQueueIdempotentHandler.java#delMessageProcessed")
    
    end
    
    subgraph   'com.shortLinked.project.dao.mapper.ShortLinkMapper'["ShortLinkMapper
    shortlink 持久层
     "]
      click 'com.shortLinked.project.dao.mapper.ShortLinkMapper' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/ShortLinkMapper.java#")
    
      direction  LR
      'com.shortLinked.project.dao.mapper.ShortLinkMapper_incrementStats'("短链接访问统计自增
     +A incrementStats")
      click 'com.shortLinked.project.dao.mapper.ShortLinkMapper_incrementStats' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/ShortLinkMapper.java#incrementStats")
    
      'com.shortLinked.project.dao.mapper.ShortLinkMapper_pageLink'("分页统计短链接
     +A pageLink")
      click 'com.shortLinked.project.dao.mapper.ShortLinkMapper_pageLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/ShortLinkMapper.java#pageLink")
    
      'com.shortLinked.project.dao.mapper.ShortLinkMapper_pageRecycleBinLink'("分页统计回收站短链接
     +A pageRecycleBinLink")
      click 'com.shortLinked.project.dao.mapper.ShortLinkMapper_pageRecycleBinLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/ShortLinkMapper.java#pageRecycleBinLink")
    
    end
    
    subgraph   'com.shortLinked.project.dao.mapper.LinkOsStatsMapper'["LinkOsStatsMapper
    短链接操作系统监控持久层
     "]
      click 'com.shortLinked.project.dao.mapper.LinkOsStatsMapper' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkOsStatsMapper.java#")
    
      direction  LR
      'com.shortLinked.project.dao.mapper.LinkOsStatsMapper_shortLinkOsState'("记录操作系统访问统计
     +A shortLinkOsState")
      click 'com.shortLinked.project.dao.mapper.LinkOsStatsMapper_shortLinkOsState' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkOsStatsMapper.java#shortLinkOsState")
    
      'com.shortLinked.project.dao.mapper.LinkOsStatsMapper_listOsStatsByShortLink'("根据短链接获取指定日期内操作系统监控数据
     +A listOsStatsByShortLink")
      click 'com.shortLinked.project.dao.mapper.LinkOsStatsMapper_listOsStatsByShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkOsStatsMapper.java#listOsStatsByShortLink")
    
      'com.shortLinked.project.dao.mapper.LinkOsStatsMapper_listOsStatsByGroup'("根据分组获取指定日期内操作系统监控数据
     +A listOsStatsByGroup")
      click 'com.shortLinked.project.dao.mapper.LinkOsStatsMapper_listOsStatsByGroup' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkOsStatsMapper.java#listOsStatsByGroup")
    
    end
    
    subgraph   'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper'["LinkAccessLogsMapper
    短链接日志监控持久层
     "]
      click 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessLogsMapper.java#")
    
      direction  LR
      'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_listTopIpByShortLink'("根据短链接获取指定日期内高频访问IP数据
     +A listTopIpByShortLink")
      click 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_listTopIpByShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessLogsMapper.java#listTopIpByShortLink")
    
      'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_findUvTypeCntByShortLink'("根据短链接获取指定日期内新旧访客类型数据
     +A findUvTypeCntByShortLink")
      click 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_findUvTypeCntByShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessLogsMapper.java#findUvTypeCntByShortLink")
    
      'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_findPvUvUidStatsByShortLink'("根据短链接获取指定日期内PV、UV、UI
     +A findPvUvUidStatsByShortLink")
      click 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_findPvUvUidStatsByShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessLogsMapper.java#findPvUvUidStatsByShortLink")
    
      'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_selectUvTypeByUsers'("获取用户信息是否新老访客
     +A selectUvTypeByUsers")
      click 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_selectUvTypeByUsers' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessLogsMapper.java#selectUvTypeByUsers")
    
      'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_findPvUvUidStatsByGroup'("根据分组获取指定日期内PV、UV、UIP
     +A findPvUvUidStatsByGroup")
      click 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_findPvUvUidStatsByGroup' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessLogsMapper.java#findPvUvUidStatsByGroup")
    
      'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_listTopIpByGroup'("根据分组获取指定日期内高频访问IP数据
     +A listTopIpByGroup")
      click 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_listTopIpByGroup' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessLogsMapper.java#listTopIpByGroup")
    
      'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_selectGroupUvTypeByUsers'("获取分组用户信息是否新老访客
     +A selectGroupUvTypeByUsers")
      click 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_selectGroupUvTypeByUsers' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessLogsMapper.java#selectGroupUvTypeByUsers")
    
      'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_selectGroupPage'("+A selectGroupPage")
      click 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_selectGroupPage' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessLogsMapper.java#selectGroupPage")
    
    end
    
    subgraph   'com.shortLinked.project.dao.mapper.LinkStatsTodayMapper'["LinkStatsTodayMapper
    单个短链接今日统计持久层
     "]
      click 'com.shortLinked.project.dao.mapper.LinkStatsTodayMapper' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkStatsTodayMapper.java#")
    
      direction  LR
      'com.shortLinked.project.dao.mapper.LinkStatsTodayMapper_shortLinkTodayState'("记录今日访问监控统计
     +A shortLinkTodayState")
      click 'com.shortLinked.project.dao.mapper.LinkStatsTodayMapper_shortLinkTodayState' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkStatsTodayMapper.java#shortLinkTodayState")
    
    end
    
    subgraph   'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper'["LinkAccessStatsMapper
    短链接监控持久层
     "]
      click 'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessStatsMapper.java#")
    
      direction  LR
      'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_linkAccessStats'("记录访问短链接
     +A linkAccessStats")
      click 'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_linkAccessStats' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessStatsMapper.java#linkAccessStats")
    
      'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listStatsByShortLink'("根据短链接获取指定日期内基础监控数据
     +A listStatsByShortLink")
      click 'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listStatsByShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessStatsMapper.java#listStatsByShortLink")
    
      'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listHourStatsByShortLink'("根据短链接获取指定日期内小时基础监控数据
     +A listHourStatsByShortLink")
      click 'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listHourStatsByShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessStatsMapper.java#listHourStatsByShortLink")
    
      'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listWeekdayStatsByShortLink'("根据短链接获取指定日期内周基础监控数据
     +A listWeekdayStatsByShortLink")
      click 'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listWeekdayStatsByShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessStatsMapper.java#listWeekdayStatsByShortLink")
    
      'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listStatsByGroup'("根据分组获取指定日期内基础监控数据
     +A listStatsByGroup")
      click 'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listStatsByGroup' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessStatsMapper.java#listStatsByGroup")
    
      'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listHourStatsByGroup'("根据分组获取指定日期内小时基础监控数据
     +A listHourStatsByGroup")
      click 'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listHourStatsByGroup' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessStatsMapper.java#listHourStatsByGroup")
    
      'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listWeekdayStatsByGroup'("根据分组获取指定日期内周基础监控数据
     +A listWeekdayStatsByGroup")
      click 'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listWeekdayStatsByGroup' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkAccessStatsMapper.java#listWeekdayStatsByGroup")
    
    end
    
    subgraph   'com.shortLinked.project.dao.mapper.LinkDeviceStatsMapper'["LinkDeviceStatsMapper
    短链接设备监控持久层
     "]
      click 'com.shortLinked.project.dao.mapper.LinkDeviceStatsMapper' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkDeviceStatsMapper.java#")
    
      direction  LR
      'com.shortLinked.project.dao.mapper.LinkDeviceStatsMapper_shortLinkDeviceState'("记录访问设备监控数据
     +A shortLinkDeviceState")
      click 'com.shortLinked.project.dao.mapper.LinkDeviceStatsMapper_shortLinkDeviceState' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkDeviceStatsMapper.java#shortLinkDeviceState")
    
      'com.shortLinked.project.dao.mapper.LinkDeviceStatsMapper_listDeviceStatsByShortLink'("根据短链接获取指定日期内访问设备监控数据
     +A listDeviceStatsByShortLink")
      click 'com.shortLinked.project.dao.mapper.LinkDeviceStatsMapper_listDeviceStatsByShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkDeviceStatsMapper.java#listDeviceStatsByShortLink")
    
      'com.shortLinked.project.dao.mapper.LinkDeviceStatsMapper_listDeviceStatsByGroup'("根据分组获取指定日期内访问设备监控数据
     +A listDeviceStatsByGroup")
      click 'com.shortLinked.project.dao.mapper.LinkDeviceStatsMapper_listDeviceStatsByGroup' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkDeviceStatsMapper.java#listDeviceStatsByGroup")
    
    end
    
    subgraph   'com.shortLinked.project.dao.mapper.LinkLocaleStatsMapper'["LinkLocaleStatsMapper
    短链接地区监控持久层
     "]
      click 'com.shortLinked.project.dao.mapper.LinkLocaleStatsMapper' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkLocaleStatsMapper.java#")
    
      direction  LR
      'com.shortLinked.project.dao.mapper.LinkLocaleStatsMapper_linkLocaleStats'("+A linkLocaleStats")
      click 'com.shortLinked.project.dao.mapper.LinkLocaleStatsMapper_linkLocaleStats' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkLocaleStatsMapper.java#linkLocaleStats")
    
      'com.shortLinked.project.dao.mapper.LinkLocaleStatsMapper_listLocaleByShortLink'("根据短链接获取指定日期内地区监控数据
     +A listLocaleByShortLink")
      click 'com.shortLinked.project.dao.mapper.LinkLocaleStatsMapper_listLocaleByShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkLocaleStatsMapper.java#listLocaleByShortLink")
    
      'com.shortLinked.project.dao.mapper.LinkLocaleStatsMapper_listLocaleByGroup'("根据分组获取指定日期内地区监控数据
     +A listLocaleByGroup")
      click 'com.shortLinked.project.dao.mapper.LinkLocaleStatsMapper_listLocaleByGroup' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkLocaleStatsMapper.java#listLocaleByGroup")
    
    end
    
    subgraph   'com.shortLinked.project.dao.mapper.LinkBrowserStatsMapper'["LinkBrowserStatsMapper
    短链接浏览器监控持久层
     "]
      click 'com.shortLinked.project.dao.mapper.LinkBrowserStatsMapper' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkBrowserStatsMapper.java#")
    
      direction  LR
      'com.shortLinked.project.dao.mapper.LinkBrowserStatsMapper_shortLinkBrowserState'("记录浏览器访问数据统计
     +A shortLinkBrowserState")
      click 'com.shortLinked.project.dao.mapper.LinkBrowserStatsMapper_shortLinkBrowserState' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkBrowserStatsMapper.java#shortLinkBrowserState")
    
      'com.shortLinked.project.dao.mapper.LinkBrowserStatsMapper_listBrowserStatsByShortLink'("根据短链接获取指定日期内浏览器监控数据
     +A listBrowserStatsByShortLink")
      click 'com.shortLinked.project.dao.mapper.LinkBrowserStatsMapper_listBrowserStatsByShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkBrowserStatsMapper.java#listBrowserStatsByShortLink")
    
      'com.shortLinked.project.dao.mapper.LinkBrowserStatsMapper_listBrowserStatsByGroup'("根据分组获取指定日期内浏览器监控数据
     +A listBrowserStatsByGroup")
      click 'com.shortLinked.project.dao.mapper.LinkBrowserStatsMapper_listBrowserStatsByGroup' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkBrowserStatsMapper.java#listBrowserStatsByGroup")
    
    end
    
    subgraph   'com.shortLinked.project.dao.mapper.LinkNetworkStatsMapper'["LinkNetworkStatsMapper
    短链接网络访问统计持久层
     "]
      click 'com.shortLinked.project.dao.mapper.LinkNetworkStatsMapper' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkNetworkStatsMapper.java#")
    
      direction  LR
      'com.shortLinked.project.dao.mapper.LinkNetworkStatsMapper_shortLinkNetworkState'("记录访问网络监控数据
     +A shortLinkNetworkState")
      click 'com.shortLinked.project.dao.mapper.LinkNetworkStatsMapper_shortLinkNetworkState' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkNetworkStatsMapper.java#shortLinkNetworkState")
    
      'com.shortLinked.project.dao.mapper.LinkNetworkStatsMapper_listNetworkStatsByShortLink'("根据短链接获取指定日期内访问网络监控数据
     +A listNetworkStatsByShortLink")
      click 'com.shortLinked.project.dao.mapper.LinkNetworkStatsMapper_listNetworkStatsByShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkNetworkStatsMapper.java#listNetworkStatsByShortLink")
    
      'com.shortLinked.project.dao.mapper.LinkNetworkStatsMapper_listNetworkStatsByGroup'("根据分组获取指定日期内访问网络监控数据
     +A listNetworkStatsByGroup")
      click 'com.shortLinked.project.dao.mapper.LinkNetworkStatsMapper_listNetworkStatsByGroup' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/dao/mapper/LinkNetworkStatsMapper.java#listNetworkStatsByGroup")
    
    end
    
    subgraph   'com.shortLinked.project.common.biz.user.UserContext'["UserContext
    用户上下文信息
     "]
      click 'com.shortLinked.project.common.biz.user.UserContext' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/biz/user/UserContext.java#")
    
      direction  LR
      'com.shortLinked.project.common.biz.user.UserContext_setUser'("设置用户至上下文
     +S setUser")
      click 'com.shortLinked.project.common.biz.user.UserContext_setUser' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/biz/user/UserContext.java#setUser")
    
      'com.shortLinked.project.common.biz.user.UserContext_getUserId'("获取上下文中用户 ID
     +S getUserId")
      click 'com.shortLinked.project.common.biz.user.UserContext_getUserId' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/biz/user/UserContext.java#getUserId")
    
      'com.shortLinked.project.common.biz.user.UserContext_getUsername'("获取上下文中用户名称
     +S getUsername")
      click 'com.shortLinked.project.common.biz.user.UserContext_getUsername' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/biz/user/UserContext.java#getUsername")
    
      'com.shortLinked.project.common.biz.user.UserContext_getRealName'("获取上下文中用户真实姓名
     +S getRealName")
      click 'com.shortLinked.project.common.biz.user.UserContext_getRealName' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/biz/user/UserContext.java#getRealName")
    
      'com.shortLinked.project.common.biz.user.UserContext_removeUser'("清理用户上下文
     +S removeUser")
      click 'com.shortLinked.project.common.biz.user.UserContext_removeUser' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/biz/user/UserContext.java#removeUser")
    
    end
    
    subgraph   'com.shortLinked.project.common.biz.user.UserTransmitInterceptor'["UserTransmitInterceptor
    用户信息传递拦截器
     "]
      click 'com.shortLinked.project.common.biz.user.UserTransmitInterceptor' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/biz/user/UserTransmitInterceptor.java#")
    
      direction  LR
      'com.shortLinked.project.common.biz.user.UserTransmitInterceptor_preHandle'("在用户拦截器中获取用户信息并设置为 Us
     +O preHandle")
      click 'com.shortLinked.project.common.biz.user.UserTransmitInterceptor_preHandle' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/biz/user/UserTransmitInterceptor.java#preHandle")
    
      'com.shortLinked.project.common.biz.user.UserTransmitInterceptor_afterCompletion'("+O afterCompletion")
      click 'com.shortLinked.project.common.biz.user.UserTransmitInterceptor_afterCompletion' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/biz/user/UserTransmitInterceptor.java#afterCompletion")
    
    end
    
    subgraph   'com.shortLinked.project.common.web.GlobalExceptionHandler'["GlobalExceptionHandler
    全局异常处理器
     拦截所有的异常
     "]
      click 'com.shortLinked.project.common.web.GlobalExceptionHandler' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/web/GlobalExceptionHandler.java#")
    
      direction  LR
      'com.shortLinked.project.common.web.GlobalExceptionHandler_validExceptionHandler'("拦截参数验证异常
     + validExceptionHandler")
      click 'com.shortLinked.project.common.web.GlobalExceptionHandler_validExceptionHandler' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/web/GlobalExceptionHandler.java#validExceptionHandler")
    
      'com.shortLinked.project.common.web.GlobalExceptionHandler_abstractException'("拦截应用内抛出的异常
     + abstractException")
      click 'com.shortLinked.project.common.web.GlobalExceptionHandler_abstractException' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/web/GlobalExceptionHandler.java#abstractException")
    
      'com.shortLinked.project.common.web.GlobalExceptionHandler_defaultErrorHandler'("拦截未捕获异常
     + defaultErrorHandler")
      click 'com.shortLinked.project.common.web.GlobalExceptionHandler_defaultErrorHandler' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/web/GlobalExceptionHandler.java#defaultErrorHandler")
    
      'com.shortLinked.project.common.web.GlobalExceptionHandler_getUrl'("- getUrl")
      click 'com.shortLinked.project.common.web.GlobalExceptionHandler_getUrl' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/web/GlobalExceptionHandler.java#getUrl")
    
    end
    
    subgraph   'com.shortLinked.project.common.convention.result.Result'["Result
    全局返回对象
     "]
      click 'com.shortLinked.project.common.convention.result.Result' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/result/Result.java#")
    
      direction  LR
      'com.shortLinked.project.common.convention.result.Result_isSuccess'("+ isSuccess")
      click 'com.shortLinked.project.common.convention.result.Result_isSuccess' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/result/Result.java#isSuccess")
    
    end
    
    subgraph   'com.shortLinked.project.common.convention.result.Results'["Results
    全局返回对象构造器
     "]
      click 'com.shortLinked.project.common.convention.result.Results' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/result/Results.java#")
    
      direction  LR
      'com.shortLinked.project.common.convention.result.Results_success'("构造成功响应
     +S success")
      click 'com.shortLinked.project.common.convention.result.Results_success' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/result/Results.java#success")
    
      'com.shortLinked.project.common.convention.result.Results_failure'("构建服务端失败响应
     +S failure")
      click 'com.shortLinked.project.common.convention.result.Results_failure' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/result/Results.java#failure")
    
    end
    
    subgraph   'com.shortLinked.project.common.convention.errorcode.IErrorCode'["IErrorCode
    平台错误码
     "]
      click 'com.shortLinked.project.common.convention.errorcode.IErrorCode' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/errorcode/IErrorCode.java#")
    
      direction  LR
      'com.shortLinked.project.common.convention.errorcode.IErrorCode_code'("错误码
     +A code")
      click 'com.shortLinked.project.common.convention.errorcode.IErrorCode_code' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/errorcode/IErrorCode.java#code")
    
      'com.shortLinked.project.common.convention.errorcode.IErrorCode_message'("错误信息
     +A message")
      click 'com.shortLinked.project.common.convention.errorcode.IErrorCode_message' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/errorcode/IErrorCode.java#message")
    
    end
    
    subgraph   'com.shortLinked.project.common.convention.errorcode.BaseErrorCode'["BaseErrorCode
    基础错误码定义
     "]
      click 'com.shortLinked.project.common.convention.errorcode.BaseErrorCode' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/errorcode/BaseErrorCode.java#")
    
      direction  LR
      'com.shortLinked.project.common.convention.errorcode.BaseErrorCode_BaseErrorCode'("-C BaseErrorCode")
      click 'com.shortLinked.project.common.convention.errorcode.BaseErrorCode_BaseErrorCode' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/errorcode/BaseErrorCode.java#BaseErrorCode")
    
      'com.shortLinked.project.common.convention.errorcode.BaseErrorCode_code'("+O code")
      click 'com.shortLinked.project.common.convention.errorcode.BaseErrorCode_code' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/errorcode/BaseErrorCode.java#code")
    
      'com.shortLinked.project.common.convention.errorcode.BaseErrorCode_message'("+O message")
      click 'com.shortLinked.project.common.convention.errorcode.BaseErrorCode_message' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/errorcode/BaseErrorCode.java#message")
    
    end
    
    subgraph   'com.shortLinked.project.common.convention.exception.ClientException'["ClientException
    客户端异常
     "]
      click 'com.shortLinked.project.common.convention.exception.ClientException' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/exception/ClientException.java#")
    
      direction  LR
      'com.shortLinked.project.common.convention.exception.ClientException_ClientException'("+C ClientException")
      click 'com.shortLinked.project.common.convention.exception.ClientException_ClientException' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/exception/ClientException.java#ClientException")
    
      'com.shortLinked.project.common.convention.exception.ClientException_toString'("+O toString")
      click 'com.shortLinked.project.common.convention.exception.ClientException_toString' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/exception/ClientException.java#toString")
    
    end
    
    subgraph   'com.shortLinked.project.common.convention.exception.RemoteException'["RemoteException
    远程服务调用异常
     "]
      click 'com.shortLinked.project.common.convention.exception.RemoteException' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/exception/RemoteException.java#")
    
      direction  LR
      'com.shortLinked.project.common.convention.exception.RemoteException_RemoteException'("+C RemoteException")
      click 'com.shortLinked.project.common.convention.exception.RemoteException_RemoteException' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/exception/RemoteException.java#RemoteException")
    
      'com.shortLinked.project.common.convention.exception.RemoteException_toString'("+O toString")
      click 'com.shortLinked.project.common.convention.exception.RemoteException_toString' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/exception/RemoteException.java#toString")
    
    end
    
    subgraph   'com.shortLinked.project.common.convention.exception.ServiceException'["ServiceException
    服务端异常
     "]
      click 'com.shortLinked.project.common.convention.exception.ServiceException' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/exception/ServiceException.java#")
    
      direction  LR
      'com.shortLinked.project.common.convention.exception.ServiceException_ServiceException'("+C ServiceException")
      click 'com.shortLinked.project.common.convention.exception.ServiceException_ServiceException' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/exception/ServiceException.java#ServiceException")
    
      'com.shortLinked.project.common.convention.exception.ServiceException_toString'("+O toString")
      click 'com.shortLinked.project.common.convention.exception.ServiceException_toString' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/exception/ServiceException.java#toString")
    
    end
    
    subgraph   'com.shortLinked.project.common.convention.exception.AbstractException'["AbstractException
    抽象项目中三类异常体系，客户端异常、服务
     都继承自这里
     "]
      click 'com.shortLinked.project.common.convention.exception.AbstractException' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/exception/AbstractException.java#")
    
      direction  LR
      'com.shortLinked.project.common.convention.exception.AbstractException_AbstractException'("+C AbstractException")
      click 'com.shortLinked.project.common.convention.exception.AbstractException_AbstractException' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/common/convention/exception/AbstractException.java#AbstractException")
    
    end
    
    subgraph   'com.shortLinked.project.config.UserConfiguration'["UserConfiguration
    用户拦截器自动装配
     "]
      click 'com.shortLinked.project.config.UserConfiguration' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/UserConfiguration.java#")
    
      direction  LR
      'com.shortLinked.project.config.UserConfiguration_addInterceptors'("拦截所有请求
     +O addInterceptors")
      click 'com.shortLinked.project.config.UserConfiguration_addInterceptors' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/UserConfiguration.java#addInterceptors")
    
    end
    
    subgraph   'com.shortLinked.project.config.SentinelRuleConfig'["SentinelRuleConfig
    短链接后台sentinel限流规则配置
     "]
      click 'com.shortLinked.project.config.SentinelRuleConfig' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/SentinelRuleConfig.java#")
    
      direction  LR
      'com.shortLinked.project.config.SentinelRuleConfig_afterPropertiesSet'("+O afterPropertiesSet")
      click 'com.shortLinked.project.config.SentinelRuleConfig_afterPropertiesSet' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/SentinelRuleConfig.java#afterPropertiesSet")
    
    end
    
    subgraph   'com.shortLinked.project.config.MyMetaObjectHandler'["MyMetaObjectHandler
    进行一个默认字段的填充
     "]
      click 'com.shortLinked.project.config.MyMetaObjectHandler' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/MyMetaObjectHandler.java#")
    
      direction  LR
      'com.shortLinked.project.config.MyMetaObjectHandler_insertFill'("+O insertFill")
      click 'com.shortLinked.project.config.MyMetaObjectHandler_insertFill' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/MyMetaObjectHandler.java#insertFill")
    
      'com.shortLinked.project.config.MyMetaObjectHandler_updateFill'("+O updateFill")
      click 'com.shortLinked.project.config.MyMetaObjectHandler_updateFill' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/MyMetaObjectHandler.java#updateFill")
    
    end
    
    subgraph   'com.shortLinked.project.config.DataBaseConfiguration'["DataBaseConfiguration
    mp 分页插件
     "]
      click 'com.shortLinked.project.config.DataBaseConfiguration' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/DataBaseConfiguration.java#")
    
      direction  LR
      'com.shortLinked.project.config.DataBaseConfiguration_mybatisPlusInterceptor'("分页插件
     ConditionalOnMissing
     + mybatisPlusInterceptor")
      click 'com.shortLinked.project.config.DataBaseConfiguration_mybatisPlusInterceptor' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/DataBaseConfiguration.java#mybatisPlusInterceptor")
    
    end
    
    subgraph   'com.shortLinked.project.config.RabbitMqConfiguration'["RabbitMqConfiguration
    rabbitmq 配置类
     "]
      click 'com.shortLinked.project.config.RabbitMqConfiguration' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/RabbitMqConfiguration.java#")
    
      direction  LR
      'com.shortLinked.project.config.RabbitMqConfiguration_fanoutExchange'("声明交换机
     + fanoutExchange")
      click 'com.shortLinked.project.config.RabbitMqConfiguration_fanoutExchange' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/RabbitMqConfiguration.java#fanoutExchange")
    
      'com.shortLinked.project.config.RabbitMqConfiguration_queue'("声明队列
     + queue")
      click 'com.shortLinked.project.config.RabbitMqConfiguration_queue' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/RabbitMqConfiguration.java#queue")
    
      'com.shortLinked.project.config.RabbitMqConfiguration_queueBinding'("绑定交换机和队列
     + queueBinding")
      click 'com.shortLinked.project.config.RabbitMqConfiguration_queueBinding' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/RabbitMqConfiguration.java#queueBinding")
    
    end
    
    subgraph   'com.shortLinked.project.config.RBloomFilterConfiguration'["RBloomFilterConfiguration
    布隆过滤器配置
     "]
      click 'com.shortLinked.project.config.RBloomFilterConfiguration' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/RBloomFilterConfiguration.java#")
    
      direction  LR
      'com.shortLinked.project.config.RBloomFilterConfiguration_shortUriCreateCachePenetrationBloomFilter'("防止短链接查询数据库的布隆过滤器
     + shortUriCreateCachePenetrationBloomFilter")
      click 'com.shortLinked.project.config.RBloomFilterConfiguration_shortUriCreateCachePenetrationBloomFilter' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/RBloomFilterConfiguration.java#shortUriCreateCachePenetrationBloomFilter")
    
    end
    
    subgraph   'com.shortLinked.project.config.RedissonClientConfiguration'["RedissonClientConfiguration
    Redisson 手动关闭默认配置
     "]
      click 'com.shortLinked.project.config.RedissonClientConfiguration' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/RedissonClientConfiguration.java#")
    
      direction  LR
      'com.shortLinked.project.config.RedissonClientConfiguration_redissonClient'("+ redissonClient")
      click 'com.shortLinked.project.config.RedissonClientConfiguration_redissonClient' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/config/RedissonClientConfiguration.java#redissonClient")
    
    end
    
    subgraph   'com.shortLinked.project.handler.CustomBlockHandler'["CustomBlockHandler
    后台短链接限流之后处理函数
     "]
      click 'com.shortLinked.project.handler.CustomBlockHandler' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/handler/CustomBlockHandler.java#")
    
      direction  LR
      'com.shortLinked.project.handler.CustomBlockHandler_createShortLinkBlockHandlerMethod'("+S createShortLinkBlockHandlerMethod")
      click 'com.shortLinked.project.handler.CustomBlockHandler_createShortLinkBlockHandlerMethod' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/handler/CustomBlockHandler.java#createShortLinkBlockHandlerMethod")
    
    end
    
    subgraph   'com.shortLinked.project.service.impl.UrlTitleServiceImpl'["UrlTitleServiceImpl
    url 获取标题接口实现层
     "]
      click 'com.shortLinked.project.service.impl.UrlTitleServiceImpl' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/UrlTitleServiceImpl.java#")
    
      direction  LR
      'com.shortLinked.project.service.impl.UrlTitleServiceImpl_getTitleByUrl'("+O getTitleByUrl")
      click 'com.shortLinked.project.service.impl.UrlTitleServiceImpl_getTitleByUrl' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/UrlTitleServiceImpl.java#getTitleByUrl")
    
    end
    
    subgraph   'com.shortLinked.project.service.impl.ShortLinkServiceImpl'["ShortLinkServiceImpl
    shortlink 接口实现层
     "]
      click 'com.shortLinked.project.service.impl.ShortLinkServiceImpl' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkServiceImpl.java#")
    
      direction  LR
      'com.shortLinked.project.service.impl.ShortLinkServiceImpl_batchCreateShortLink'("+O batchCreateShortLink")
      click 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_batchCreateShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkServiceImpl.java#batchCreateShortLink")
    
      'com.shortLinked.project.service.impl.ShortLinkServiceImpl_createShortLink'("创建短链接
     +O createShortLink")
      click 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_createShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkServiceImpl.java#createShortLink")
    
      'com.shortLinked.project.service.impl.ShortLinkServiceImpl_createShortLinkByLock'("+O createShortLinkByLock")
      click 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_createShortLinkByLock' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkServiceImpl.java#createShortLinkByLock")
    
      'com.shortLinked.project.service.impl.ShortLinkServiceImpl_generateSuffixByLock'("通过分布式锁来创建短链接
     - generateSuffixByLock")
      click 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_generateSuffixByLock' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkServiceImpl.java#generateSuffixByLock")
    
      'com.shortLinked.project.service.impl.ShortLinkServiceImpl_generateSuffix'("生成短链接  -- 验证短链接是否重复了
     - generateSuffix")
      click 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_generateSuffix' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkServiceImpl.java#generateSuffix")
    
      'com.shortLinked.project.service.impl.ShortLinkServiceImpl_pageShortlink'("+O pageShortlink")
      click 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_pageShortlink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkServiceImpl.java#pageShortlink")
    
      'com.shortLinked.project.service.impl.ShortLinkServiceImpl_listShortLinkGroupQueryCount'("+O listShortLinkGroupQueryCount")
      click 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_listShortLinkGroupQueryCount' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkServiceImpl.java#listShortLinkGroupQueryCount")
    
      'com.shortLinked.project.service.impl.ShortLinkServiceImpl_updateShortLink'("+O updateShortLink")
      click 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_updateShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkServiceImpl.java#updateShortLink")
    
      'com.shortLinked.project.service.impl.ShortLinkServiceImpl_restoreUrl'("+O restoreUrl")
      click 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_restoreUrl' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkServiceImpl.java#restoreUrl")
    
      'com.shortLinked.project.service.impl.ShortLinkServiceImpl_buildLinkStatsRecordAndSetUser'("- buildLinkStatsRecordAndSetUser")
      click 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_buildLinkStatsRecordAndSetUser' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkServiceImpl.java#buildLinkStatsRecordAndSetUser")
    
      'com.shortLinked.project.service.impl.ShortLinkServiceImpl_shortLinkAccessStats'("+ shortLinkAccessStats")
      click 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_shortLinkAccessStats' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkServiceImpl.java#shortLinkAccessStats")
    
      'com.shortLinked.project.service.impl.ShortLinkServiceImpl_getFavicon'("获取网站图标 favicon
     - getFavicon")
      click 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_getFavicon' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkServiceImpl.java#getFavicon")
    
      'com.shortLinked.project.service.impl.ShortLinkServiceImpl_verificationWhitelist'("验证原始跳转链接是否配置白名单
     + verificationWhitelist")
      click 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_verificationWhitelist' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkServiceImpl.java#verificationWhitelist")
    
    end
    
    subgraph   'com.shortLinked.project.service.impl.RecycleBinServiceImpl'["RecycleBinServiceImpl
    短链接回收站接口实现层
     "]
      click 'com.shortLinked.project.service.impl.RecycleBinServiceImpl' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/RecycleBinServiceImpl.java#")
    
      direction  LR
      'com.shortLinked.project.service.impl.RecycleBinServiceImpl_saveRecycleBin'("+O saveRecycleBin")
      click 'com.shortLinked.project.service.impl.RecycleBinServiceImpl_saveRecycleBin' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/RecycleBinServiceImpl.java#saveRecycleBin")
    
      'com.shortLinked.project.service.impl.RecycleBinServiceImpl_pageRecycleBinShortlink'("+O pageRecycleBinShortlink")
      click 'com.shortLinked.project.service.impl.RecycleBinServiceImpl_pageRecycleBinShortlink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/RecycleBinServiceImpl.java#pageRecycleBinShortlink")
    
      'com.shortLinked.project.service.impl.RecycleBinServiceImpl_recoverRecycleBin'("+O recoverRecycleBin")
      click 'com.shortLinked.project.service.impl.RecycleBinServiceImpl_recoverRecycleBin' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/RecycleBinServiceImpl.java#recoverRecycleBin")
    
      'com.shortLinked.project.service.impl.RecycleBinServiceImpl_removeRecycleBin'("+O removeRecycleBin")
      click 'com.shortLinked.project.service.impl.RecycleBinServiceImpl_removeRecycleBin' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/RecycleBinServiceImpl.java#removeRecycleBin")
    
    end
    
    subgraph   'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl'["ShortLinkStatsServiceImpl
    短链接监控接口实现层
     "]
      click 'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkStatsServiceImpl.java#")
    
      direction  LR
      'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_oneShortLinkStats'("+O oneShortLinkStats")
      click 'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_oneShortLinkStats' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkStatsServiceImpl.java#oneShortLinkStats")
    
      'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_shortLinkStatsAccessRecord'("+O shortLinkStatsAccessRecord")
      click 'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_shortLinkStatsAccessRecord' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkStatsServiceImpl.java#shortLinkStatsAccessRecord")
    
      'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStats'("+O groupShortLinkStats")
      click 'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStats' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkStatsServiceImpl.java#groupShortLinkStats")
    
      'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStatsAccessRecord'("+O groupShortLinkStatsAccessRecord")
      click 'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStatsAccessRecord' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkStatsServiceImpl.java#groupShortLinkStatsAccessRecord")
    
      'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_checkGroupBelongToUser'("检查这个分组是否是登录用户的
     + checkGroupBelongToUser")
      click 'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_checkGroupBelongToUser' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/impl/ShortLinkStatsServiceImpl.java#checkGroupBelongToUser")
    
    end
    
    subgraph   'com.shortLinked.project.service.UrlTitleService'["UrlTitleService
    url 获取标题接口层
     "]
      click 'com.shortLinked.project.service.UrlTitleService' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/UrlTitleService.java#")
    
      direction  LR
      'com.shortLinked.project.service.UrlTitleService_getTitleByUrl'("url 通过网站标题接口
     +A getTitleByUrl")
      click 'com.shortLinked.project.service.UrlTitleService_getTitleByUrl' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/UrlTitleService.java#getTitleByUrl")
    
    end
    
    subgraph   'com.shortLinked.project.service.ShortLinkService'["ShortLinkService
    shortlink 接口层
     "]
      click 'com.shortLinked.project.service.ShortLinkService' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/ShortLinkService.java#")
    
      direction  LR
      'com.shortLinked.project.service.ShortLinkService_createShortLink'("新增短链接
     +A createShortLink")
      click 'com.shortLinked.project.service.ShortLinkService_createShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/ShortLinkService.java#createShortLink")
    
      'com.shortLinked.project.service.ShortLinkService_pageShortlink'("分页查询短链接
     +A pageShortlink")
      click 'com.shortLinked.project.service.ShortLinkService_pageShortlink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/ShortLinkService.java#pageShortlink")
    
      'com.shortLinked.project.service.ShortLinkService_listShortLinkGroupQueryCount'("短链接分组内个数
     +A listShortLinkGroupQueryCount")
      click 'com.shortLinked.project.service.ShortLinkService_listShortLinkGroupQueryCount' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/ShortLinkService.java#listShortLinkGroupQueryCount")
    
      'com.shortLinked.project.service.ShortLinkService_updateShortLink'("修改短链接
     +A updateShortLink")
      click 'com.shortLinked.project.service.ShortLinkService_updateShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/ShortLinkService.java#updateShortLink")
    
      'com.shortLinked.project.service.ShortLinkService_restoreUrl'("短链接跳转到长链接
     +A restoreUrl")
      click 'com.shortLinked.project.service.ShortLinkService_restoreUrl' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/ShortLinkService.java#restoreUrl")
    
      'com.shortLinked.project.service.ShortLinkService_batchCreateShortLink'("批量创建短链接
     +A batchCreateShortLink")
      click 'com.shortLinked.project.service.ShortLinkService_batchCreateShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/ShortLinkService.java#batchCreateShortLink")
    
      'com.shortLinked.project.service.ShortLinkService_shortLinkAccessStats'("短链接统计
     +A shortLinkAccessStats")
      click 'com.shortLinked.project.service.ShortLinkService_shortLinkAccessStats' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/ShortLinkService.java#shortLinkAccessStats")
    
      'com.shortLinked.project.service.ShortLinkService_createShortLinkByLock'("通过分布式锁来创建短链接
     +A createShortLinkByLock")
      click 'com.shortLinked.project.service.ShortLinkService_createShortLinkByLock' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/ShortLinkService.java#createShortLinkByLock")
    
    end
    
    subgraph   'com.shortLinked.project.service.RecycleBinService'["RecycleBinService
    短链接回收站接口层
     "]
      click 'com.shortLinked.project.service.RecycleBinService' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/RecycleBinService.java#")
    
      direction  LR
      'com.shortLinked.project.service.RecycleBinService_saveRecycleBin'("短链接保存回收站
     +A saveRecycleBin")
      click 'com.shortLinked.project.service.RecycleBinService_saveRecycleBin' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/RecycleBinService.java#saveRecycleBin")
    
      'com.shortLinked.project.service.RecycleBinService_pageRecycleBinShortlink'("回收站短链接分组查询
     +A pageRecycleBinShortlink")
      click 'com.shortLinked.project.service.RecycleBinService_pageRecycleBinShortlink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/RecycleBinService.java#pageRecycleBinShortlink")
    
      'com.shortLinked.project.service.RecycleBinService_recoverRecycleBin'("回收站短链接恢复
     +A recoverRecycleBin")
      click 'com.shortLinked.project.service.RecycleBinService_recoverRecycleBin' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/RecycleBinService.java#recoverRecycleBin")
    
      'com.shortLinked.project.service.RecycleBinService_removeRecycleBin'("移除回收站中的短链接
     +A removeRecycleBin")
      click 'com.shortLinked.project.service.RecycleBinService_removeRecycleBin' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/RecycleBinService.java#removeRecycleBin")
    
    end
    
    subgraph   'com.shortLinked.project.service.ShortLinkStatsService'["ShortLinkStatsService
    短链接监控接口层
     "]
      click 'com.shortLinked.project.service.ShortLinkStatsService' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/ShortLinkStatsService.java#")
    
      direction  LR
      'com.shortLinked.project.service.ShortLinkStatsService_oneShortLinkStats'("单个短链接监控
     +A oneShortLinkStats")
      click 'com.shortLinked.project.service.ShortLinkStatsService_oneShortLinkStats' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/ShortLinkStatsService.java#oneShortLinkStats")
    
      'com.shortLinked.project.service.ShortLinkStatsService_shortLinkStatsAccessRecord'("访问单个短链接指定时间内访问记录监控统计
     +A shortLinkStatsAccessRecord")
      click 'com.shortLinked.project.service.ShortLinkStatsService_shortLinkStatsAccessRecord' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/ShortLinkStatsService.java#shortLinkStatsAccessRecord")
    
      'com.shortLinked.project.service.ShortLinkStatsService_groupShortLinkStats'("访问分组短链接指定日期内访问记录监控统计
     +A groupShortLinkStats")
      click 'com.shortLinked.project.service.ShortLinkStatsService_groupShortLinkStats' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/ShortLinkStatsService.java#groupShortLinkStats")
    
      'com.shortLinked.project.service.ShortLinkStatsService_groupShortLinkStatsAccessRecord'("指定分组短链接指定日期访问统计记录详情
     +A groupShortLinkStatsAccessRecord")
      click 'com.shortLinked.project.service.ShortLinkStatsService_groupShortLinkStatsAccessRecord' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/service/ShortLinkStatsService.java#groupShortLinkStatsAccessRecord")
    
    end
    
    subgraph   'com.shortLinked.project.toolkit.HashUtil'["HashUtil
    HASH 工具类
     "]
      click 'com.shortLinked.project.toolkit.HashUtil' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/toolkit/HashUtil.java#")
    
      direction  LR
      'com.shortLinked.project.toolkit.HashUtil_hashToBase62'("将字符串进行哈希，转为十进制数
     +S hashToBase62")
      click 'com.shortLinked.project.toolkit.HashUtil_hashToBase62' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/toolkit/HashUtil.java#hashToBase62")
    
      'com.shortLinked.project.toolkit.HashUtil_convertDecToBase62'("将十进制数转为 base62 编码字符串
     -S convertDecToBase62")
      click 'com.shortLinked.project.toolkit.HashUtil_convertDecToBase62' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/toolkit/HashUtil.java#convertDecToBase62")
    
    end
    
    subgraph   'com.shortLinked.project.toolkit.ShortLinkUtil'["ShortLinkUtil
    短链接工具类
     "]
      click 'com.shortLinked.project.toolkit.ShortLinkUtil' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/toolkit/ShortLinkUtil.java#")
    
      direction  LR
      'com.shortLinked.project.toolkit.ShortLinkUtil_getLinkValidTime'("获取短链接设置的有效期  -- 永久有效
     +S getLinkValidTime")
      click 'com.shortLinked.project.toolkit.ShortLinkUtil_getLinkValidTime' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/toolkit/ShortLinkUtil.java#getLinkValidTime")
    
      'com.shortLinked.project.toolkit.ShortLinkUtil_getActualIP'("+S getActualIP")
      click 'com.shortLinked.project.toolkit.ShortLinkUtil_getActualIP' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/toolkit/ShortLinkUtil.java#getActualIP")
    
      'com.shortLinked.project.toolkit.ShortLinkUtil_getUserOS'("获取用户访问的操作系统
     +S getUserOS")
      click 'com.shortLinked.project.toolkit.ShortLinkUtil_getUserOS' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/toolkit/ShortLinkUtil.java#getUserOS")
    
      'com.shortLinked.project.toolkit.ShortLinkUtil_getBrowser'("获取用户访问浏览器
     +S getBrowser")
      click 'com.shortLinked.project.toolkit.ShortLinkUtil_getBrowser' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/toolkit/ShortLinkUtil.java#getBrowser")
    
      'com.shortLinked.project.toolkit.ShortLinkUtil_getDevice'("获取用户访问设备
     +S getDevice")
      click 'com.shortLinked.project.toolkit.ShortLinkUtil_getDevice' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/toolkit/ShortLinkUtil.java#getDevice")
    
      'com.shortLinked.project.toolkit.ShortLinkUtil_getNetwork'("获取用户访问网络
     +S getNetwork")
      click 'com.shortLinked.project.toolkit.ShortLinkUtil_getNetwork' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/toolkit/ShortLinkUtil.java#getNetwork")
    
      'com.shortLinked.project.toolkit.ShortLinkUtil_extractDomain'("获取原始跳转链接的域名 - 带 www.
     +S extractDomain")
      click 'com.shortLinked.project.toolkit.ShortLinkUtil_extractDomain' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/toolkit/ShortLinkUtil.java#extractDomain")
    
    end
    
    subgraph   'com.shortLinked.project.controller.UrlTitleController'["UrlTitleController
    "]
      click 'com.shortLinked.project.controller.UrlTitleController' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/UrlTitleController.java#")
    
      direction  LR
      'com.shortLinked.project.controller.UrlTitleController_getTitleByUrl'("通过 url 获取网站的标题
     + getTitleByUrl")
      click 'com.shortLinked.project.controller.UrlTitleController_getTitleByUrl' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/UrlTitleController.java#getTitleByUrl")
    
    end
    
    subgraph   'com.shortLinked.project.controller.ShortLinkController'["ShortLinkController
    短链接控制层
     "]
      click 'com.shortLinked.project.controller.ShortLinkController' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/ShortLinkController.java#")
    
      direction  LR
      'com.shortLinked.project.controller.ShortLinkController_restoreUrl'("短链接跳转到原始链接
     + restoreUrl")
      click 'com.shortLinked.project.controller.ShortLinkController_restoreUrl' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/ShortLinkController.java#restoreUrl")
    
      'com.shortLinked.project.controller.ShortLinkController_createShortLink'("新增短链接
     + createShortLink")
      click 'com.shortLinked.project.controller.ShortLinkController_createShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/ShortLinkController.java#createShortLink")
    
      'com.shortLinked.project.controller.ShortLinkController_createShortLinkByLock'("通过分布式锁 - 创建短链接
     + createShortLinkByLock")
      click 'com.shortLinked.project.controller.ShortLinkController_createShortLinkByLock' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/ShortLinkController.java#createShortLinkByLock")
    
      'com.shortLinked.project.controller.ShortLinkController_pageShortLink'("短链接查询分页功能
     + pageShortLink")
      click 'com.shortLinked.project.controller.ShortLinkController_pageShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/ShortLinkController.java#pageShortLink")
    
      'com.shortLinked.project.controller.ShortLinkController_listShortLinkGroupQueryCount'("短链接分组内个数查询
     + listShortLinkGroupQueryCount")
      click 'com.shortLinked.project.controller.ShortLinkController_listShortLinkGroupQueryCount' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/ShortLinkController.java#listShortLinkGroupQueryCount")
    
      'com.shortLinked.project.controller.ShortLinkController_updateShortLink'("修改短链接信息
     + updateShortLink")
      click 'com.shortLinked.project.controller.ShortLinkController_updateShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/ShortLinkController.java#updateShortLink")
    
      'com.shortLinked.project.controller.ShortLinkController_batchCreateShortLink'("批量创建短链接
     + batchCreateShortLink")
      click 'com.shortLinked.project.controller.ShortLinkController_batchCreateShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/ShortLinkController.java#batchCreateShortLink")
    
    end
    
    subgraph   'com.shortLinked.project.controller.RecycleBinController'["RecycleBinController
    短链接回收站控制层
     "]
      click 'com.shortLinked.project.controller.RecycleBinController' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/RecycleBinController.java#")
    
      direction  LR
      'com.shortLinked.project.controller.RecycleBinController_saveRecycleBin'("短链接回收站保存功能
     + saveRecycleBin")
      click 'com.shortLinked.project.controller.RecycleBinController_saveRecycleBin' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/RecycleBinController.java#saveRecycleBin")
    
      'com.shortLinked.project.controller.RecycleBinController_pageRecycleBinShortLink'("回收站短链接分页查询
     + pageRecycleBinShortLink")
      click 'com.shortLinked.project.controller.RecycleBinController_pageRecycleBinShortLink' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/RecycleBinController.java#pageRecycleBinShortLink")
    
      'com.shortLinked.project.controller.RecycleBinController_recoverRecycleBin'("回收站短链接恢复功能
     + recoverRecycleBin")
      click 'com.shortLinked.project.controller.RecycleBinController_recoverRecycleBin' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/RecycleBinController.java#recoverRecycleBin")
    
    end
    
    subgraph   'com.shortLinked.project.controller.ShortLinkStatsController'["ShortLinkStatsController
    短链接监控控制层
     "]
      click 'com.shortLinked.project.controller.ShortLinkStatsController' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/ShortLinkStatsController.java#")
    
      direction  LR
      'com.shortLinked.project.controller.ShortLinkStatsController_shortLinkStats'("访问单个短链接指定时间内监控数据
     + shortLinkStats")
      click 'com.shortLinked.project.controller.ShortLinkStatsController_shortLinkStats' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/ShortLinkStatsController.java#shortLinkStats")
    
      'com.shortLinked.project.controller.ShortLinkStatsController_shortLinkGroupStats'("分组短链接指定时间内监控数据
     + shortLinkGroupStats")
      click 'com.shortLinked.project.controller.ShortLinkStatsController_shortLinkGroupStats' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/ShortLinkStatsController.java#shortLinkGroupStats")
    
      'com.shortLinked.project.controller.ShortLinkStatsController_shortLinkStatsAccessRecord'("短链接指定时间访问记录详情
     + shortLinkStatsAccessRecord")
      click 'com.shortLinked.project.controller.ShortLinkStatsController_shortLinkStatsAccessRecord' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/ShortLinkStatsController.java#shortLinkStatsAccessRecord")
    
      'com.shortLinked.project.controller.ShortLinkStatsController_groupShortLinkStatsAccessRecord'("分组短链接指定日期访问统计记录详情
     + groupShortLinkStatsAccessRecord")
      click 'com.shortLinked.project.controller.ShortLinkStatsController_groupShortLinkStatsAccessRecord' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/ShortLinkStatsController.java#groupShortLinkStatsAccessRecord")
    
    end
    
    subgraph   'com.shortLinked.project.controller.ShortLinkNotFoundController'["ShortLinkNotFoundController
    短链接不存在跳转控制器
     "]
      click 'com.shortLinked.project.controller.ShortLinkNotFoundController' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/ShortLinkNotFoundController.java#")
    
      direction  LR
      'com.shortLinked.project.controller.ShortLinkNotFoundController_notfound'("短链接不存在跳转页面
     + notfound")
      click 'com.shortLinked.project.controller.ShortLinkNotFoundController_notfound' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/controller/ShortLinkNotFoundController.java#notfound")
    
    end
    
    subgraph   'com.shortLinked.project.initialize.ShortLinkStatsStreamInitilizeTask'["ShortLinkStatsStreamInitilizeTask
    初始化短链接监控统计消息队列消费者组
     "]
      click 'com.shortLinked.project.initialize.ShortLinkStatsStreamInitilizeTask' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/initialize/ShortLinkStatsStreamInitilizeTask.java#")
    
      direction  LR
      'com.shortLinked.project.initialize.ShortLinkStatsStreamInitilizeTask_afterPropertiesSet'("+O afterPropertiesSet")
      click 'com.shortLinked.project.initialize.ShortLinkStatsStreamInitilizeTask_afterPropertiesSet' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/initialize/ShortLinkStatsStreamInitilizeTask.java#afterPropertiesSet")
    
    end
    
    subgraph   'com.shortLinked.project.ShortLinkedProjectApplication'["ShortLinkedProjectApplication
    "]
      click 'com.shortLinked.project.ShortLinkedProjectApplication' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/ShortLinkedProjectApplication.java#")
    
      direction  LR
      'com.shortLinked.project.ShortLinkedProjectApplication_main'("+S main")
      click 'com.shortLinked.project.ShortLinkedProjectApplication_main' call navigate("C:/Users/52739/Desktop/shortlink/shortLinked/project/src/main/java/com/shortLinked/project/ShortLinkedProjectApplication.java#main")
    
    end
    
    'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_onMessage' --> 'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_isMessageBeingConsumed'
    'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_onMessage' --> 'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_isAccomplish'
    'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_onMessage' --> 'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_actualSaveShortLinkStats'
    'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_onMessage' --> 'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_delMessageProcessed'
    'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_onMessage' --> 'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_setAccomplish'
    'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_actualSaveShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_linkAccessStats'
    'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_actualSaveShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkLocaleStatsMapper_linkLocaleStats'
    'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_actualSaveShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkOsStatsMapper_shortLinkOsState'
    'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_actualSaveShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkBrowserStatsMapper_shortLinkBrowserState'
    'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_actualSaveShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkDeviceStatsMapper_shortLinkDeviceState'
    'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_actualSaveShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkNetworkStatsMapper_shortLinkNetworkState'
    'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_actualSaveShortLinkStats' --> 'com.shortLinked.project.dao.mapper.ShortLinkMapper_incrementStats'
    'com.shortLinked.project.mq.consumer.ShortLinkStatsSaveConsumer_actualSaveShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkStatsTodayMapper_shortLinkTodayState'
    'com.shortLinked.project.mq.consumer.DelayShortLinkStatsConsumer_OnMessage' --> 'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_isMessageBeingConsumed'
    'com.shortLinked.project.mq.consumer.DelayShortLinkStatsConsumer_OnMessage' --> 'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_isAccomplish'
    'com.shortLinked.project.mq.consumer.DelayShortLinkStatsConsumer_OnMessage' --> 'com.shortLinked.project.service.ShortLinkService_shortLinkAccessStats'
    'com.shortLinked.project.mq.consumer.DelayShortLinkStatsConsumer_OnMessage' --> 'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_delMessageProcessed'
    'com.shortLinked.project.mq.consumer.DelayShortLinkStatsConsumer_OnMessage' --> 'com.shortLinked.project.mq.idempotent.MessageQueueIdempotentHandler_setAccomplish'
    'com.shortLinked.project.mq.consumer.DelayShortLinkStatsConsumer_afterPropertiesSet' --> 'com.shortLinked.project.mq.consumer.DelayShortLinkStatsConsumer_OnMessage'
    'com.shortLinked.project.common.biz.user.UserTransmitInterceptor_preHandle' --> 'com.shortLinked.project.common.biz.user.UserContext_setUser'
    'com.shortLinked.project.common.biz.user.UserTransmitInterceptor_afterCompletion' --> 'com.shortLinked.project.common.biz.user.UserContext_removeUser'
    'com.shortLinked.project.common.web.GlobalExceptionHandler_validExceptionHandler' --> 'com.shortLinked.project.common.web.GlobalExceptionHandler_getUrl'
    'com.shortLinked.project.common.web.GlobalExceptionHandler_validExceptionHandler' --> 'com.shortLinked.project.common.convention.result.Results_failure'
    'com.shortLinked.project.common.web.GlobalExceptionHandler_validExceptionHandler' --> 'com.shortLinked.project.common.convention.errorcode.BaseErrorCode_code'
    'com.shortLinked.project.common.web.GlobalExceptionHandler_abstractException' --> 'com.shortLinked.project.common.convention.result.Results_failure'
    'com.shortLinked.project.common.web.GlobalExceptionHandler_defaultErrorHandler' --> 'com.shortLinked.project.common.web.GlobalExceptionHandler_getUrl'
    'com.shortLinked.project.common.web.GlobalExceptionHandler_defaultErrorHandler' --> 'com.shortLinked.project.common.convention.result.Results_failure'
    'com.shortLinked.project.common.convention.result.Results_failure' --> 'com.shortLinked.project.common.convention.errorcode.BaseErrorCode_code'
    'com.shortLinked.project.common.convention.result.Results_failure' --> 'com.shortLinked.project.common.convention.errorcode.BaseErrorCode_message'
    'com.shortLinked.project.common.convention.errorcode.IErrorCode_code' --> 'com.shortLinked.project.common.convention.errorcode.BaseErrorCode_code'
    'com.shortLinked.project.common.convention.errorcode.IErrorCode_message' --> 'com.shortLinked.project.common.convention.errorcode.BaseErrorCode_message'
    'com.shortLinked.project.common.convention.exception.ClientException_ClientException' --> 'com.shortLinked.project.common.convention.exception.ClientException_ClientException'
    'com.shortLinked.project.common.convention.exception.ClientException_ClientException' --> 'com.shortLinked.project.common.convention.exception.AbstractException_AbstractException'
    'com.shortLinked.project.common.convention.exception.RemoteException_RemoteException' --> 'com.shortLinked.project.common.convention.exception.RemoteException_RemoteException'
    'com.shortLinked.project.common.convention.exception.RemoteException_RemoteException' --> 'com.shortLinked.project.common.convention.exception.AbstractException_AbstractException'
    'com.shortLinked.project.common.convention.exception.ServiceException_ServiceException' --> 'com.shortLinked.project.common.convention.exception.ServiceException_ServiceException'
    'com.shortLinked.project.common.convention.exception.ServiceException_ServiceException' --> 'com.shortLinked.project.common.convention.exception.AbstractException_AbstractException'
    'com.shortLinked.project.common.convention.exception.ServiceException_ServiceException' --> 'com.shortLinked.project.common.convention.errorcode.IErrorCode_message'
    'com.shortLinked.project.common.convention.exception.AbstractException_AbstractException' --> 'com.shortLinked.project.common.convention.errorcode.IErrorCode_code'
    'com.shortLinked.project.common.convention.exception.AbstractException_AbstractException' --> 'com.shortLinked.project.common.convention.errorcode.IErrorCode_message'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_batchCreateShortLink' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_createShortLink'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_createShortLink' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_verificationWhitelist'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_createShortLink' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_generateSuffix'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_createShortLink' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_getFavicon'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_createShortLink' --> 'com.shortLinked.project.toolkit.ShortLinkUtil_getLinkValidTime'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_createShortLinkByLock' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_verificationWhitelist'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_createShortLinkByLock' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_generateSuffixByLock'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_createShortLinkByLock' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_getFavicon'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_createShortLinkByLock' --> 'com.shortLinked.project.toolkit.ShortLinkUtil_getLinkValidTime'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_generateSuffixByLock' --> 'com.shortLinked.project.toolkit.HashUtil_hashToBase62'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_generateSuffix' --> 'com.shortLinked.project.toolkit.HashUtil_hashToBase62'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_pageShortlink' --> 'com.shortLinked.project.dao.mapper.ShortLinkMapper_pageLink'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_updateShortLink' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_verificationWhitelist'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_updateShortLink' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_getFavicon'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_restoreUrl' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_shortLinkAccessStats'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_restoreUrl' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_buildLinkStatsRecordAndSetUser'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_restoreUrl' --> 'com.shortLinked.project.toolkit.ShortLinkUtil_getLinkValidTime'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_buildLinkStatsRecordAndSetUser' --> 'com.shortLinked.project.toolkit.ShortLinkUtil_getActualIP'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_buildLinkStatsRecordAndSetUser' --> 'com.shortLinked.project.toolkit.ShortLinkUtil_getUserOS'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_buildLinkStatsRecordAndSetUser' --> 'com.shortLinked.project.toolkit.ShortLinkUtil_getBrowser'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_buildLinkStatsRecordAndSetUser' --> 'com.shortLinked.project.toolkit.ShortLinkUtil_getDevice'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_buildLinkStatsRecordAndSetUser' --> 'com.shortLinked.project.toolkit.ShortLinkUtil_getNetwork'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_shortLinkAccessStats' --> 'com.shortLinked.project.mq.producer.ShortLinkStatsSaveProducer_send'
    'com.shortLinked.project.service.impl.ShortLinkServiceImpl_verificationWhitelist' --> 'com.shortLinked.project.toolkit.ShortLinkUtil_extractDomain'
    'com.shortLinked.project.service.impl.RecycleBinServiceImpl_pageRecycleBinShortlink' --> 'com.shortLinked.project.dao.mapper.ShortLinkMapper_pageRecycleBinLink'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_oneShortLinkStats' --> 'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_checkGroupBelongToUser'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_oneShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listStatsByShortLink'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_oneShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_findPvUvUidStatsByShortLink'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_oneShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkLocaleStatsMapper_listLocaleByShortLink'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_oneShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listHourStatsByShortLink'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_oneShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_listTopIpByShortLink'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_oneShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listWeekdayStatsByShortLink'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_oneShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkBrowserStatsMapper_listBrowserStatsByShortLink'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_oneShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkOsStatsMapper_listOsStatsByShortLink'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_oneShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_findUvTypeCntByShortLink'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_oneShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkDeviceStatsMapper_listDeviceStatsByShortLink'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_oneShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkNetworkStatsMapper_listNetworkStatsByShortLink'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_shortLinkStatsAccessRecord' --> 'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_checkGroupBelongToUser'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_shortLinkStatsAccessRecord' --> 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_selectUvTypeByUsers'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStats' --> 'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_checkGroupBelongToUser'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listStatsByGroup'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_findPvUvUidStatsByGroup'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkLocaleStatsMapper_listLocaleByGroup'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listHourStatsByGroup'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_listTopIpByGroup'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkAccessStatsMapper_listWeekdayStatsByGroup'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkBrowserStatsMapper_listBrowserStatsByGroup'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkOsStatsMapper_listOsStatsByGroup'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkDeviceStatsMapper_listDeviceStatsByGroup'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStats' --> 'com.shortLinked.project.dao.mapper.LinkNetworkStatsMapper_listNetworkStatsByGroup'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStatsAccessRecord' --> 'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_checkGroupBelongToUser'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStatsAccessRecord' --> 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_selectGroupPage'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStatsAccessRecord' --> 'com.shortLinked.project.dao.mapper.LinkAccessLogsMapper_selectGroupUvTypeByUsers'
    'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_checkGroupBelongToUser' --> 'com.shortLinked.project.common.biz.user.UserContext_getUsername'
    'com.shortLinked.project.service.UrlTitleService_getTitleByUrl' --> 'com.shortLinked.project.service.impl.UrlTitleServiceImpl_getTitleByUrl'
    'com.shortLinked.project.service.ShortLinkService_createShortLink' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_createShortLink'
    'com.shortLinked.project.service.ShortLinkService_pageShortlink' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_pageShortlink'
    'com.shortLinked.project.service.ShortLinkService_listShortLinkGroupQueryCount' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_listShortLinkGroupQueryCount'
    'com.shortLinked.project.service.ShortLinkService_updateShortLink' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_updateShortLink'
    'com.shortLinked.project.service.ShortLinkService_restoreUrl' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_restoreUrl'
    'com.shortLinked.project.service.ShortLinkService_batchCreateShortLink' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_batchCreateShortLink'
    'com.shortLinked.project.service.ShortLinkService_shortLinkAccessStats' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_shortLinkAccessStats'
    'com.shortLinked.project.service.ShortLinkService_createShortLinkByLock' --> 'com.shortLinked.project.service.impl.ShortLinkServiceImpl_createShortLinkByLock'
    'com.shortLinked.project.service.RecycleBinService_saveRecycleBin' --> 'com.shortLinked.project.service.impl.RecycleBinServiceImpl_saveRecycleBin'
    'com.shortLinked.project.service.RecycleBinService_pageRecycleBinShortlink' --> 'com.shortLinked.project.service.impl.RecycleBinServiceImpl_pageRecycleBinShortlink'
    'com.shortLinked.project.service.RecycleBinService_recoverRecycleBin' --> 'com.shortLinked.project.service.impl.RecycleBinServiceImpl_recoverRecycleBin'
    'com.shortLinked.project.service.RecycleBinService_removeRecycleBin' --> 'com.shortLinked.project.service.impl.RecycleBinServiceImpl_removeRecycleBin'
    'com.shortLinked.project.service.ShortLinkStatsService_oneShortLinkStats' --> 'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_oneShortLinkStats'
    'com.shortLinked.project.service.ShortLinkStatsService_shortLinkStatsAccessRecord' --> 'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_shortLinkStatsAccessRecord'
    'com.shortLinked.project.service.ShortLinkStatsService_groupShortLinkStats' --> 'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStats'
    'com.shortLinked.project.service.ShortLinkStatsService_groupShortLinkStatsAccessRecord' --> 'com.shortLinked.project.service.impl.ShortLinkStatsServiceImpl_groupShortLinkStatsAccessRecord'
    'com.shortLinked.project.toolkit.HashUtil_hashToBase62' --> 'com.shortLinked.project.toolkit.HashUtil_convertDecToBase62'
    'com.shortLinked.project.toolkit.ShortLinkUtil_getNetwork' --> 'com.shortLinked.project.toolkit.ShortLinkUtil_getActualIP'
    'com.shortLinked.project.controller.UrlTitleController_getTitleByUrl' --> 'com.shortLinked.project.common.convention.result.Results_success'
    'com.shortLinked.project.controller.UrlTitleController_getTitleByUrl' --> 'com.shortLinked.project.service.UrlTitleService_getTitleByUrl'
    'com.shortLinked.project.controller.ShortLinkController_restoreUrl' --> 'com.shortLinked.project.service.ShortLinkService_restoreUrl'
    'com.shortLinked.project.controller.ShortLinkController_createShortLink' --> 'com.shortLinked.project.common.convention.result.Results_success'
    'com.shortLinked.project.controller.ShortLinkController_createShortLink' --> 'com.shortLinked.project.service.ShortLinkService_createShortLink'
    'com.shortLinked.project.controller.ShortLinkController_createShortLinkByLock' --> 'com.shortLinked.project.common.convention.result.Results_success'
    'com.shortLinked.project.controller.ShortLinkController_createShortLinkByLock' --> 'com.shortLinked.project.service.ShortLinkService_createShortLinkByLock'
    'com.shortLinked.project.controller.ShortLinkController_pageShortLink' --> 'com.shortLinked.project.common.convention.result.Results_success'
    'com.shortLinked.project.controller.ShortLinkController_pageShortLink' --> 'com.shortLinked.project.service.ShortLinkService_pageShortlink'
    'com.shortLinked.project.controller.ShortLinkController_listShortLinkGroupQueryCount' --> 'com.shortLinked.project.common.convention.result.Results_success'
    'com.shortLinked.project.controller.ShortLinkController_listShortLinkGroupQueryCount' --> 'com.shortLinked.project.service.ShortLinkService_listShortLinkGroupQueryCount'
    'com.shortLinked.project.controller.ShortLinkController_updateShortLink' --> 'com.shortLinked.project.service.ShortLinkService_updateShortLink'
    'com.shortLinked.project.controller.ShortLinkController_updateShortLink' --> 'com.shortLinked.project.common.convention.result.Results_success'
    'com.shortLinked.project.controller.ShortLinkController_batchCreateShortLink' --> 'com.shortLinked.project.common.convention.result.Results_success'
    'com.shortLinked.project.controller.ShortLinkController_batchCreateShortLink' --> 'com.shortLinked.project.service.ShortLinkService_batchCreateShortLink'
    'com.shortLinked.project.controller.RecycleBinController_saveRecycleBin' --> 'com.shortLinked.project.service.RecycleBinService_saveRecycleBin'
    'com.shortLinked.project.controller.RecycleBinController_saveRecycleBin' --> 'com.shortLinked.project.common.convention.result.Results_success'
    'com.shortLinked.project.controller.RecycleBinController_pageRecycleBinShortLink' --> 'com.shortLinked.project.common.convention.result.Results_success'
    'com.shortLinked.project.controller.RecycleBinController_pageRecycleBinShortLink' --> 'com.shortLinked.project.service.RecycleBinService_pageRecycleBinShortlink'
    'com.shortLinked.project.controller.RecycleBinController_recoverRecycleBin' --> 'com.shortLinked.project.service.RecycleBinService_recoverRecycleBin'
    'com.shortLinked.project.controller.RecycleBinController_recoverRecycleBin' --> 'com.shortLinked.project.common.convention.result.Results_success'
    'com.shortLinked.project.controller.RecycleBinController_recoverRecycleBin' --> 'com.shortLinked.project.service.RecycleBinService_removeRecycleBin'
    'com.shortLinked.project.controller.ShortLinkStatsController_shortLinkStats' --> 'com.shortLinked.project.common.convention.result.Results_success'
    'com.shortLinked.project.controller.ShortLinkStatsController_shortLinkStats' --> 'com.shortLinked.project.service.ShortLinkStatsService_oneShortLinkStats'
    'com.shortLinked.project.controller.ShortLinkStatsController_shortLinkGroupStats' --> 'com.shortLinked.project.common.convention.result.Results_success'
    'com.shortLinked.project.controller.ShortLinkStatsController_shortLinkGroupStats' --> 'com.shortLinked.project.service.ShortLinkStatsService_groupShortLinkStats'
    'com.shortLinked.project.controller.ShortLinkStatsController_shortLinkStatsAccessRecord' --> 'com.shortLinked.project.common.convention.result.Results_success'
    'com.shortLinked.project.controller.ShortLinkStatsController_shortLinkStatsAccessRecord' --> 'com.shortLinked.project.service.ShortLinkStatsService_shortLinkStatsAccessRecord'
    'com.shortLinked.project.controller.ShortLinkStatsController_groupShortLinkStatsAccessRecord' --> 'com.shortLinked.project.common.convention.result.Results_success'
    'com.shortLinked.project.controller.ShortLinkStatsController_groupShortLinkStatsAccessRecord' --> 'com.shortLinked.project.service.ShortLinkStatsService_groupShortLinkStatsAccessRecord'
    </pre>
    
    <!-- https://cdn.jsdelivr.net/npm/mermaid@9.4.3/dist/mermaid.js -->
    <!-- change it in DrawGraphSetting.properties -->
    <script src="file:///D://draw-graph/mermaid.js"></script>
    
    <script>
      function navigate(link) {
        callJava('navigate:' + link)
      }
      function openDevtools() {
        callJava('openDevtools')
      }
      function callJava(cmd) {
        window.java({
          request: cmd,
          onSuccess(response){
            console.log(response);
          },
          onFailure(error_code,error_message){
            console.log(error_code,error_message);
          }
        });
      }
      const config = {
        startOnLoad: true,
        maxTextSize: Number.MAX_VALUE,
        flowchart: { useMaxWidth: true, htmlLabels: true, curve: 'cardinal' },
        securityLevel: 'loose',
      };
      mermaid.initialize(config);
    </script>
    <button onclick='openDevtools()'>openDevtools</button>
    <br>
    Fast! If open java/pom.xml file but no graph, may be mermaid.js is not found, see src to copy it.
    